package com.zanfeng.signleplatform.api.service.modules.auth;

import com.zanfeng.signleplatform.api.io.modules.auth.AccountDetailIO;
import com.zanfeng.signleplatform.api.io.modules.auth.ModuleDetailIO;
import com.zanfeng.signleplatform.api.io.modules.auth.PermissionDetailIO;
import com.zanfeng.signleplatform.api.io.modules.auth.RoleDetailIO;
import com.zanfeng.signleplatform.api.result.modules.account.AccountResult;
import com.zanfeng.signleplatform.api.result.modules.auth.AuthInfoResult;
import com.zanfeng.signleplatform.api.result.modules.auth.AuthLoginResult;
import com.zanfeng.signleplatform.api.result.modules.auth.RoleModulePermissionResult;
import com.zanfeng.signleplatform.api.result.modules.module.ModuleResult;
import com.zanfeng.signleplatform.api.result.modules.permission.PermissionResult;
import com.zanfeng.signleplatform.api.result.modules.role.RoleResult;
import com.zanfeng.signleplatform.common.auth.ApiTokenResult;
import com.zanfeng.signleplatform.io.PageListIO;
import com.zanfeng.signleplatform.results.FormListResult;

import java.util.List;

public interface AuthService {

    //  用户登录
    AuthLoginResult login(String username, String password, String ip);

    //  用户权限信息
    AuthInfoResult getAuthInfo(Integer accountId);

    /* --------------- 用户相关 --------------- */

    // 分页查询AccountResult
    FormListResult queryAccountPageList(PageListIO io);

    //  查询用户详情
    AccountResult findAccountResultById(Integer id);

    //  添加用户详情
    void saveAccount(AccountDetailIO io);

    //  更新用户详情
    void updateAccount(AccountDetailIO io);

    //  根据ID列表逻辑删除
    void deleteAccountListByIdList(List<Integer> idList);

    //  查询全部可用的角色
    List<RoleResult> queryRoleActiveList();

    /* --------------- 角色相关 --------------- */

    // 分页查询Role
    FormListResult queryRolePageList(PageListIO io);

    //  查询角色详情
    RoleResult findRoleResultById(Integer id);

    //  添加角色详情
    void saveRole(ApiTokenResult authToken, RoleDetailIO io);

    //  更新角色详情
    void updateRole(ApiTokenResult authToken, RoleDetailIO io);

    //  根据ID列表逻辑删除
    void deleteRoleListByIdList(List<Integer> idList);

    //  获取角色权限
    RoleModulePermissionResult findRoleModulePermissionResult(ApiTokenResult authToken);

    /* --------------- 菜单相关 --------------- */

    // 分页查询菜单
    FormListResult queryModulePageList(PageListIO io);

    //  查询菜单详情
    ModuleResult findModuleResultById(Integer id);

    //  添加菜单详情
    void saveModule(ApiTokenResult authToken, ModuleDetailIO io);

    //  更新菜单详情
    void updateModule(ApiTokenResult authToken, ModuleDetailIO io);

    //  根据ID列表逻辑删除
    void deleteModuleListByIdList(List<Integer> idList);

    //  查询组织机构子节点
    List<ModuleResult> queryModuleNodeList(String parentId);

    //  查询节点子元素数量
    int countChildrenModuleListByIdList(List<Integer> idList);

    /* --------------- 权限相关 --------------- */

    // 分页查询Role
    FormListResult queryPermissionPageList(PageListIO io);

    //  查询角色详情
    PermissionResult findPermissionResultById(Integer id);

    //  添加角色详情
    void savePermission(ApiTokenResult authToken, PermissionDetailIO io);

    //  更新角色详情
    void updatePermission(ApiTokenResult authToken, PermissionDetailIO io);

    //  根据ID列表逻辑删除
    void deletePermissionListByIdList(List<Integer> idList);

}
